package br.skytef.stmanager.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Locale;

import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.read.biff.BiffException;

public class PlanLyra {

	private static Workbook planilha;
	private Sheet sheet;
	private String  mensagemErro;
	private String serial;
	private String revenda;
	private String razaoSocial;
	private long cnpj;
	private String dataAtivacao;
	private String dataCancelamento;
	private int diasFaturados;
	private String fatia;
	private int transacoes;	
	private double ValorPonto;
	private int qtdExcedente;
	private double ValorExcedente;
	private int chamadas;
	private double totalValor;
	private double valorMedio;
	
	private static String linhaErrada;
	public String getLinhaErrada() {return linhaErrada;}
	
	/**
	 * @return the planilha
	 */
	public static Workbook getPlanilha() {
		return planilha;
	}

	/**
	 * @param planilha the planilha to set
	 */
	public static void setPlanilha(Workbook planilha) {
		PlanLyra.planilha = planilha;
	}

	/**
	 * @return the mensagemErro
	 */
	public String getMensagemErro() {
		return mensagemErro;
	}

	/**
	 * @param mensagemErro the mensagemErro to set
	 */
	public void setMensagemErro(String mensagemErro) {
		this.mensagemErro = mensagemErro;
	}

	/**
	 * @return the serial
	 */
	public String getSerial() {
		return serial;
	}

	/**
	 * @param serial the serial to set
	 */
	public void setSerial(String serial) {
		this.serial = serial;
	}

	/**
	 * @return the revenda
	 */
	public String getRevenda() {
		return revenda;
	}

	/**
	 * @param revenda the revenda to set
	 */
	public void setRevenda(String revenda) {
		this.revenda = revenda;
	}

	/**
	 * @return the razaoSocial
	 */
	public String getRazaoSocial() {
		return razaoSocial;
	}

	/**
	 * @param razaoSocial the razaoSocial to set
	 */
	public void setRazaoSocial(String razaoSocial) {
		this.razaoSocial = razaoSocial;
	}

	/**
	 * @return the cnpj
	 */
	public long getCnpj() {
		return cnpj;
	}

	/**
	 * @param cnpj the cnpj to set
	 */
	public void setCnpj(long cnpj) {
		this.cnpj = cnpj;
	}

	/**
	 * @return the dataAtivacao
	 */
	public String getDataAtivacao() {
		return dataAtivacao;
	}

	/**linhaErrada = sheet.getRowView(i).toString();
	 * @param dataAtivacao the dataAtivacao to set
	 */
	public void setDataAtivacao(String dataAtivacao) {
		this.dataAtivacao = dataAtivacao;
	}

	/**
	 * @return the dataCancelamento
	 */
	public String getDataCancelamento() {
		return dataCancelamento;
	}

	/**
	 * @param dataCancelamento the dataCancelamento to set
	 */
	public void setDataCancelamento(String dataCancelamento) {
		this.dataCancelamento = dataCancelamento;
	}

	/**
	 * @return the diasFaturados
	 */
	public int getDiasFaturados() {
		return diasFaturados;
	}

	/**
	 * @param diasFaturados the diasFaturados to set
	 */
	public void setDiasFaturados(int diasFaturados) {
		this.diasFaturados = diasFaturados;
	}

	/**
	 * @return the fatia
	 */
	public String getFatia() {
		return fatia;
	}

	/**
	 * @param fatia the fatia to set
	 */
	public void setFatia(String fatia) {
		this.fatia = fatia;
	}

	/**
	 * @return the transacoes
	 */
	public int getTransacoes() {
		return transacoes;
	}

	/**
	 * @param transacoes the transacoes to set
	 */
	public void setTransacoes(int transacoes) {
		this.transacoes = transacoes;
	}

	/**
	 * @return the valorPonto
	 */
	public double getValorPonto() {
		return ValorPonto;
	}

	/**
	 * @param valorPonto the valorPonto to set
	 */
	public void setValorPonto(double valorPonto) {
		ValorPonto = valorPonto;
	}

	/**
	 * @return the qtdExcedente
	 */
	public int getQtdExcedente() {
		return qtdExcedente;
	}

	/**
	 * @param qtdExcedente the qtdExcedente to set
	 */
	public void setQtdExcedente(int qtdExcedente) {
		this.qtdExcedente = qtdExcedente;
	}

	/**
	 * @return the valorExcedente
	 */
	public double getValorExcedente() {
		return ValorExcedente;
	}

	/**
	 * @param valorExcedente the valorExcedente to set
	 */
	public void setValorExcedente(double valorExcedente) {
		ValorExcedente = valorExcedente;
	}

	/**
	 * @return the chamadas
	 */
	public int getChamadas() {
		return chamadas;
	}

	/**
	 * @param chamadas the chamadas to set
	 */
	public void setChamadas(int chamadas) {
		this.chamadas = chamadas;
	}

	/**
	 * @return the totalValor
	 */
	public double getTotalValor() {
		return totalValor;
	}

	/**
	 * @param totalValor the totalValor to set
	 */
	public void setTotalValor(double totalValor) {
		this.totalValor = totalValor;
	}

	/**
	 * @return the valorMedio
	 */
	public double getValorMedio() {
		return valorMedio;
	}

	/**
	 * @param valorMedio the valorMedio to set
	 */
	public void setValorMedio(double valorMedio) {
		this.valorMedio = valorMedio;
	}

	public PlanLyra(InputStream is) throws BiffException, IOException{
		WorkbookSettings workbookSettings = new WorkbookSettings();
		workbookSettings.setLocale(new Locale("pt", "BR"));
		workbookSettings.setExcelDisplayLanguage("PT");
		workbookSettings.setExcelRegionalSettings("BR");
		workbookSettings.setEncoding( "Cp1252" );
		planilha = Workbook.getWorkbook(is , workbookSettings);
		sheet = planilha.getSheet(0);
	}

	/**
	 * Método para validar planilha da LYRA. 
	 */

	public boolean validar(){     
		try{
			
			if(!sheet.getCell(0, 0).getContents().toUpperCase().trim().equals("SERIAL")){
				mensagemErro = "Erro: Coluna \"Serial\"";
				return false;
			}	

			else if(!sheet.getCell(1, 0).getContents().toUpperCase().trim().equals("CLIENTE")){
				mensagemErro = "Erro: Coluna \"Cliente\"";
				return false;
			}

			else if(!sheet.getCell(2, 0).getContents().toUpperCase().trim().equals("ESTABELECIMENTO")){
				mensagemErro = "Erro: Coluna \"Estabelecimento\"";
				return false;
			}

			else if(!sheet.getCell(3, 0).getContents().toUpperCase().trim().equals("CNPJ")){
				mensagemErro = "Erro: Coluna \"CNPJ\"";
				return false;
			}

			else if(!sheet.getCell(5, 0).getContents().toUpperCase().trim().equals("CANCELAMENTO")){
				mensagemErro = "Erro: Coluna \"Cancelamento\"";
				return false;
			}

			else if(!sheet.getCell(6, 0).getContents().toUpperCase().trim().equals("DIAS FATURADOS")){
				mensagemErro = "Erro: Coluna \"Dias faturados\"";
				return false;
			}

			else if(!sheet.getCell(7, 0).getContents().toUpperCase().trim().equals("FATIA")){
				mensagemErro = "Erro: Coluna \"Fatia\"";
				return false;
			}

			else if(!sheet.getCell(8, 0).getContents().toUpperCase().trim().equals("TRANSAÇÕES(QTDE)")){
				mensagemErro = "Erro: Coluna \"Transações(Qtde)\"";
				return false;
			}else 
				return true;
		}catch (Exception e){
			setMensagemErro("Planilha inválida");
			return false;
		}
	}

	public int qtlinha(){
		Sheet sheet = planilha.getSheet(0);
		return sheet.getRows();
	}
	
	
	public void importarlinha(int i){
		linhaErrada = ("Erro na linha:"+(i+1)+" CNPJ: " +sheet.getCell(3, i).getContents());
		setSerial(sheet.getCell(0, i).getContents().toUpperCase().trim());
		setRevenda(sheet.getCell(1, i).getContents().toUpperCase().trim());
		setRazaoSocial(sheet.getCell(2, i).getContents().toUpperCase().trim());
		setCnpj(new Cnpj().StringParaInteiro(sheet.getCell(3, i).getContents()));
		setDataAtivacao(sheet.getCell(4, i).getContents());
		setDataCancelamento(sheet.getCell(5, i).getContents());
		setDiasFaturados(StrInt(sheet.getCell(6, i).getContents()));
		setFatia(sheet.getCell(7, i).getContents().toUpperCase().trim());
		setTransacoes(StrInt(sheet.getCell(8, i).getContents()));	
		setValorPonto(StrDoble(sheet.getCell(9, i).getContents()));
		setQtdExcedente(StrInt(sheet.getCell(10, i).getContents()));
		setValorExcedente(StrDoble(sheet.getCell(11, i).getContents()));
		setChamadas(StrInt(sheet.getCell(12, i).getContents()));
		setTotalValor(StrDoble(sheet.getCell(13, i).getContents()));
		setValorMedio(StrDoble(sheet.getCell(14, i).getContents()));
	}
	
	
	public Double StrDoble(String valor){
		Double num = 0.0;
		String aux = valor;
		try {
			if(valor.contains(",")){
				aux = valor.replace(".", "");
			}
			aux = aux.replace(",",".");
			num = Double.parseDouble(aux);
		} catch (Exception e) {
			System.out.println("Erro na conversão de Double: "+e);
		}
		return num;
	}
	public int StrInt(String valor){
		int num;
		try {
			num = Integer.parseInt(valor);
		} catch (Exception e) {
			num = 0;
		}		
		return num;
	}

}
